package com.wt.springsamples.rabbitmq.demo;

import com.rabbitmq.client.*;

import java.io.IOException;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;

public class MessageConsumerTest {
    private static  final String QUEUE_NAME="queue_demo";
    private static  final String IP_ADDRESS="127.0.0.1";
    private static  final int PORT=5672;

    public static void main(String[] args) throws IOException, TimeoutException {
        Address[] addresses = new Address[]{new Address(IP_ADDRESS,PORT)};
        ConnectionFactory factory = new ConnectionFactory();
        factory.setUsername("guest");
        factory.setPassword("guest");
        factory.setVirtualHost("/");
        Connection connection = factory.newConnection(addresses);
        //channel不能在线程之间共享
        Channel channel = connection.createChannel();
        boolean autoAck = false;
        channel.basicQos(64);//告诉rabbitmq不要一次性给消费者推送大于64个消息
//        Consumer consumer = new DefaultConsumer(channel){
//            @Override
//            public void handleDelivery(String consumerTag,Envelope envelope,AMQP.BasicProperties properties,byte[] body)throws IOException{
//
//                System.out.println("receive message: "+ new String(body));
//
//                try {
//                    TimeUnit.SECONDS.sleep(1);
//                }catch (InterruptedException e){
//                    e.printStackTrace();
//                }
//
//                channel.basicAck(envelope.getDeliveryTag(),false);
//            }
//        };
        channel.basicConsume(QUEUE_NAME,autoAck, new DefaultConsumer(channel){
            @Override
            public void handleDelivery(String consumerTag,Envelope envelope,AMQP.BasicProperties properties,byte[] body)throws IOException{

                System.out.println("receive message: "+ new String(body));

                try {
                    TimeUnit.SECONDS.sleep(1);
                }catch (InterruptedException e){
                    e.printStackTrace();
                }

                channel.basicAck(envelope.getDeliveryTag(),false);
            }
        });
        //等待回调函数执行完毕后，关闭资源
//        TimeUnit.SECONDS.sleep(5);
//        channel.close();
//        connection.close();
    }
}
